package com.tbit.uqbike.webmanager.dao.core;


import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.tbit.uqbike.object.pojo.BatchUpdateParkFeature;
import com.tbit.uqbike.object.pojo.BatchUpdateParkPoint;
import com.tbit.uqbike.object.pojo.HeatMapStat;
import com.tbit.uqbike.object.pojo.ParkPoint;
import com.tbit.uqbike.object.pojo.statistics.ExportParkPoint;
import com.tbit.common.entity.pojo.vo.ParkPointCoreDataVO;
import org.apache.ibatis.annotations.Param;

import java.util.*;

/**
 * 停车点dao
 *
 * @author Leon
 * 2017年2月24日 下午4:02:36
 */
public interface ParkPointDao extends BaseMapper<ParkPoint> {
    /**
     * 添加
     *
     * @param parkPoint
     */
    @Override
    int insert(ParkPoint parkPoint);

    /**
     * 更新
     *
     * @param parkPoint
     */
    void update(ParkPoint parkPoint);

    /**
     * 删除
     *
     * @param parkPointId
     */
    void del(Integer parkPointId);

    /**
     * 根据停车点id查询
     *
     * @param parkPointId
     * @return
     */
    ParkPoint getByParkPointId(Integer parkPointId);

    /**
     * 根据平台账户id查询
     *
     * @param accountId
     * @return
     */
    List<ParkPoint> getByAccountId(Integer accountId);
    /**
     * 根据平台账户id查询
     *
     * @param accountId
     * @return
     */
    List<ParkPoint> selectByAccountId(Integer accountId);

    List<ParkPoint> getByRegionId(Map<String, Object> params);

    ParkPoint getByMachineId(Integer machineId);


    List<String> getByParkPointIds(Integer parkPointId);
    /**
     * 分页查询
     *
     * @param params
     * @return
     */
    List<ParkPoint> queryPage(Map<String, Object> params);

    /**
     * 获取总数
     *
     * @return
     */
    Integer getTotal(Map<String, Object> params);

    /**
     * 模糊查询
     *
     * @param
     * @return
     */
    List<ParkPoint> queryByName(Map<String, Object> params);


    List<ParkPoint> getByAccountAndArea(Map<String, Object> params);

    List<ParkPoint> getAll();

    /**
     * 借出站点热力图统计
     */
    List<HeatMapStat> statByStartPark(Map<String, Object> params);

    /**
     * 借出站点热力图统计
     */
    List<HeatMapStat> statByEndPark(Map<String, Object> params);

    List<ExportParkPoint> selectParkPoint(Map<String, Object> map);

    Integer updateParkPoint(Map<String, Object> map);

    /**
     * 根据站点id批量查询站点
     */
    List<ParkPoint> getParkpointByIds(@Param("parkPointIds") Set<Integer> parkPointIds);

    /**
     * 判断站点名字是否重复
     *
     * @param accountId 区域id
     * @param name      站点名称
     * @return
     */
    Integer checkParkPointName(@Param("accountId") Integer accountId, @Param("name") String name);

    /**
     * 更新站点容量和误差范围
     *
     * @param batchUpdateParkPoint
     * @return
     */
    int updateByNameAndAccountId(BatchUpdateParkPoint batchUpdateParkPoint);

    /**
     * 查询区域下的站点数据
     *
     * @param adAccountId
     * @return
     */
    List<BatchUpdateParkPoint> getBatchUpdateByAdAccountId(@Param("adAccountId") Integer adAccountId);

    /**
     * 查询站点功能列表开启
     *
     * @param adAccountId 。
     * @return 。
     */
    List<BatchUpdateParkFeature> getBatchUpdateParkFeatureByAdAccountId(@Param("adAccountId") Integer adAccountId);

    /**
     * 查询站点功能
     * @param params
     * @return
     */
    List<Integer> queryParkPoint(Map<String, Object> params);

    /**
     * 获取站点分析核心数据
     *
     * @param accountId 区域id
     */
    ParkPointCoreDataVO getCoreData(Integer accountId);

    /**
     * 获取产生订单站点数量
     *
     * @param accountId 区域id
     * @param startTime 开始时间
     * @param endTime   结束时间
     */
    Integer getParkPointReturnData(@Param("accountId") Integer accountId, @Param("startTime") Date startTime,
                                                        @Param("endTime") Date endTime);

    /**
     * 根据名称查询指定区域内的站点数量
     * @param accountId     区域id
     * @param siteNameSet   站点名称
     * @return int
     */
    int checkParkPointNameBySet(@Param("accountId") Integer accountId, @Param("siteNameSet") List<String> siteNameSet);

    /**
     * 批量新增站点信息
     * @param parkPointList 站点信息
     */
    void insertBatch(@Param("parkPointList") List<ParkPoint> parkPointList);

    /**
     * 根据站点实体类查询站点列表
     * @param parkPoint 站点信息
     * @return List<ParkPoint>
     */
    List<ParkPoint> selectListByEntity(ParkPoint parkPoint);

    /**
     * 根据区域id查询站点列表是否大于传入的站点数量
     * @param accountId 区域id
     * @param count     站点数量
     */
    Boolean checkCountByAccountId(@Param("accountId") Integer accountId, @Param("count") Integer count);
}